<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>26.常用正则表达式封装</title>
        <script>
            /**
             * 高级表单校验，通过正则表达式
             */
            var regularExpressions = {
                // 纯中文，比如我就是小小游
                "chinese" : /^[\u4E00-\u9FA5]+$/,
                // 纯英文(不区分大小写)，比如ABC aBc abc defghijk...
                "english" : /^[A-z]+$/i,
                // 去掉字符串左右两边的空格
                "trim" : /^\s*|\s*$/,
                // 邮箱正确格式，如下：
                /**
                 * sk13710681303@163.com
                 * sk13710681303@vip.qq.com
                 */
                "email" : /^\w+@[a-z0-9]+(\.[a-z]+){1,3}$/,
                /**
                 * DNS规定，域名中的标号都由英文字母和数字组成，每一个标号不超过63个字符，
                 * 也不区分大小写字母。标号中除连字符（-）外不能使用其他的标点符号。级别
                 * 最低的域名写在最左边，而级别最高的域名写在最右边。由多个标号组成的完整
                 * 域名总共不超过255个字符
                 * 匹配http url
                 */
                "website" : /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*([\?&]\w+=\w*)*$/,
                /**
                 * qq正确格式，如下
                 * 1.前面第一位不能是0
                 * 2.最少要5位，最大是10位的qq号
                 * 3.qq号必须是数字
                 */
                "qq" : /^[1-9][0-9]{4,9}$/,
                /**
                 * 邮政编码，如下：
                 * 1.第一位不能为0
                 * 2.6位纯数字
                 */
                "postalCode" : /^[1-9]\d{5}$/,
                /**
                 * 身份证输入规则：
                 * 1.15位的纯数字，第一位不能为0
                 * 1.18位的纯数字，第一位不能为0
                 * 1.18位的纯数字，第一位不能为0,最后一位是x结束的
                 */
                "idCard" : /^[1-9]\d{14}$|^[1-9]\d{17}$|^[1-9]\d{16}x$/
            };

            // 测试下website
            var websiteRe = regularExpressions.website;
            var str = 'http://www.kaiyouservices.com?username=allen&password=123456';
            if ( websiteRe.test(str) ) {
                alert('您输入的是一个合法的网址');
            } else {
                alert('您输入的不是一个合法的网址');
            }

            // 测试下chinese
            var chineseRe = regularExpressions.chinese;
            var str = '我就是小小游，英文名是allen!';
            if ( chineseRe.test(str) ) {
                alert('您输入的是纯中文');
            } else {
                alert('您输入的不是纯中文');
            }

            // 测试下english
            var englishRe = regularExpressions.english;
            var str = 'aBcDEFghijk';
            if ( englishRe.test(str) ) {
                alert('您输入的是纯英文');
            } else {
                alert('您输入的不是纯英文');
            }

            // 测试下trim
            var trimRe = regularExpressions.trim;
            str = '  allen  ';
            if ( trimRe.test(str) ) {
                alert('您输入的字符有空格');
            } else {
                alert('您输入的字符没有空格');
            }

            // 测试下email
            var emailRe = regularExpressions.email;
            // error
            str = 'sk13710681303@*vip.qq.com';
            // str = 'sk13710681303@vip.qq.com';
            if ( emailRe.test(str) ) {
                alert('您输入的email格式正确');
            } else {
                alert('您输入的email格式错误');
            }

            // 测试下qq
            var qqRe = regularExpressions.qq;
            // error ---> 5-10为数字
            // str = '2149';
            // 数字超出最大限制了
            // str = '21491214911';
            // 这个有字符就更离谱了
            // str = '21491aaa';
            str = '214913005';
            if ( qqRe.test(str) ) {
                alert('您输入的qq格式正确');
            } else {
                alert('您输入的qq格式错误');
            }

            // 测试下postalCode
            var postalCodeRe = regularExpressions.postalCode;
            // error
            str = '518000';
            if ( postalCodeRe.test(str) ) {
                alert('您输入的邮政编码格式正确');
            } else {
                alert('您输入的邮政编码格式错误');
            }

            // 测试下idCard
            var idCardRe = regularExpressions.idCard;
            // error
            str = '44142119910310691x';
            if ( idCardRe.test(str) ) {
                alert('您输入的身份证格式正确');
            } else {
                alert('您输入的身份证格式错误');
            }
        </script>
    </head>
    <body>

    </body>
</html>
